home *** CD-ROM | disk | FTP | other *** search
/ Pascal Super Library / Pascal Super Library (CW International)(1997).bin / MATH / MATH1 / LINFIT2.LIB < prev    next >
Text File  |  1985-04-03  |  1KB  |  44 lines

  1. {159} {update ->} {166}
  2. procedure linfit(x,y: ary;
  3.          var y_calc: ary;
  4.          var a,b:    real;
  5.             n:   integer);
  6. { fit a straight line (y_calc) through n sets of x and y pairs of points }
  7.  
  8. var    i        : integer;
  9.  
  10.     sum_x,sum_y,sum_xy,sum_x2,
  11.     sum_y2,xi,yi,sxy,syy,
  12.     sxx        : real;
  13.  
  14. begin         { linfit }
  15.   sum_x:=0.0;
  16.   sum_y:=0.0;
  17.   sum_xy:=0.0;
  18.   sum_x2:=0.0;
  19.   sum_y2:=0.0;
  20.   for i:=1 to n do
  21.     begin
  22.       xi:=x[i];
  23.       yi:=y[i];
  24.       sum_x:=sum_x+xi;
  25.       sum_y:=sum_y+yi;
  26.       sum_xy:=sum_xy+xi*yi;
  27.       sum_x2:=sum_x2+xi*xi;
  28.       sum_y2:=sum_y2+yi*yi;
  29.     end;
  30.   sxx:=sum_x2-sum_x*sum_x/n;
  31.   sxy:=sum_xy-sum_x*sum_y/n;
  32.   syy:=sum_y2-sum_y*sum_y/n;
  33.   b:=sxy/sxx;
  34.   a:=((sum_x2*sum_y-sum_x*sum_xy)/n)/sxx;
  35.   correl_coef:=sxy/sqrt(sxx*syy);
  36.   see:=sqrt((sum_y2-a*sum_y-b*sum_xy)/(n-2));
  37.   sigma_b:=see/sqrt(sxx);
  38.   sigma_a:=sigma_b*sqrt(sum_x2/n);
  39.  
  40.   for i:=1 to n do
  41.     y_calc[i]:=a+b*x[i]
  42. end;        { LINFIT }
  43.  
  44.